package com.zuipin.mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.zuipin.entity.BaseDictionaryData;
import com.zuipin.entity.product.ProductExtInfo;
import com.zuipin.entity.product.TagInfo;
import com.zuipin.util.Pagination;
import com.zuipin.vo.BackExtProDetailVo;
import com.zuipin.vo.BackProductPlatformSearchVo;
import com.zuipin.vo.BackProductPlatformVo;
import com.zuipin.vo.IntegralProSearchVo;
import com.zuipin.vo.IntegralProVo;

import net.sf.json.JSONObject;

/**
 * 商品拓展信息数据操作接口类
 *
 * @ClassName ProductExtInfoMapper 
 * @author wangcongyi
 * @date 2017年4月20日 上午9:49:51
 */
@Mapper
public interface ProductExtInfoMapper {
	
	// 根据商品SKU和系统ID获取上架的商品拓展信息
	ProductExtInfo selectByProSku(JSONObject object);
	
	// 根据商品ID和系统ID获取商品拓展信息
	ProductExtInfo selectByProId(JSONObject object);
	
	// 根据商品SKU修改商品销售数
	boolean updateSalesByProSku(JSONObject object);
	
	// 根据商品拓展信息ID和上下架状态 查询是否存在
	ProductExtInfo isExists(JSONObject params);
	
	// 修改商品上下架
	boolean modifyState(JSONObject object);
	
	// 根据更新时间和系统ID查询商品信息
	List<Map<String, Object>> findProExt(JSONObject parmas);
	
	// 批量修改商品标签信息
	int updateTagInfoBatch(@Param("tagInfo") TagInfo tagInfo, @Param("proSkus") List<String> proSkuList);
	
	// 批量修改商品库存信息
	int updateStockBatch(@Param("stocks") List<Map<String, Object>> list);
	
	// 判断该（商品/商品列表）是否已设置标签信息
	List<ProductExtInfo> isSettledTagInfo(@Param("proSkuList") List<String> proSkuList, @Param("tagId") Long tagId);
	
	// 删除对应商品标签信息
	int removeTagInfo(@Param("sysId") Long sysId, @Param("skus") List<String> skus);
	
	// 根据标签ID查找商品信息列表
	List<ProductExtInfo> findProExtByTagId(BaseDictionaryData tagInfo);
	
	// 根据商品SKU集和系统id查找商品拓展信息列表
	List<ProductExtInfo> findProExtBySkus(JSONObject params);
	
	// 查找商品拓展信息（sku,主图,标题,上下架信息）通过skus
	List<Map<String, Object>> findProExtList(@Param("skus") List<String> skus, @Param("device") String device, @Param("sysId") Long sysId);
	
	// 查找商品拓展信息（sku,主图,标题,上下架信息）通过单个sku
	Map<String, Object> findProAndMainUrlImgByPro(@Param("proSku") String proSku, @Param("device") String device, @Param("sysId") Long sysId);
	
	// 查询已上架的商品SKU集
	String findSkusByOnShelf(@Param("page") JSONObject params);
	
	// 查询已上架的商品总条数
	Integer getTotalRecord();
	
	int deleteByPrimaryKey(Long id);
	
	int insert(ProductExtInfo record);
	
	boolean insertSelective(ProductExtInfo record);
	
	ProductExtInfo selectByPrimaryKey(Long id);
	
	boolean updateByPrimaryKeySelective(ProductExtInfo record);
	
	int updateByPrimaryKey(ProductExtInfo record);
	
	// 查询特价商品
	List<Map<String, Object>> querySpecialPricePro();
	
	// 设置特价商品
	int updateSpecialPricePro(@Param("id") Long id, @Param("proSku") String proSku, @Param("isSales") int isSales, @Param("specialPrice") BigDecimal specialPrice);
	
	/**
	 * 获取前台积分产品列表
	 * @author zhuangjiajian
	 * @param searchVo
	 * @param page
	 * @return
	 */
	public List<IntegralProVo> getIntegralPro(@Param("searchVo") IntegralProSearchVo searchVo, @Param("page") Pagination page);
	
	/**
	 * 根据BackProductPlatformSearchVo查询（ 包含catId ）
	 * @param search
	 * @param page
	 * @param sysId
	 * @return
	 */
	List<BackProductPlatformVo> findByProPlatformSearch(@Param("search") BackProductPlatformSearchVo search, @Param("page") Pagination page, @Param("sysId") Long sysId);
	
	BackExtProDetailVo findProExtProDetail(@Param("sysId") Long sysId, @Param("proSku") String proSku);
	
	/**
	 * 根据proId查询所有上架的平台商品
	 */
	List<ProductExtInfo> findExtProByProId(@Param("proId") Long proId);
	
	/**
	 * 根据proId查询所有平台商品(查询是否曾经上架过)
	 */
	List<ProductExtInfo> findExtProByProIdAll(@Param("proId") Long proId);
	
	/**
	 * 更新 必填主标题 非必填副标题 必填最低购买 非必填最低购买
	 */
	
	public void updateExtProByBack(@Param("proExt") ProductExtInfo proExt);
	
	public List<Map<String, Object>> canOnShelf(@Param("newTime") String newTime);
	
	public List<Map<String, Object>> canOffShelf(@Param("newTime") String newTime);
	
	public void updateProOnShelfTime(@Param("id") Long id, @Param("onShelfTime") String onShelfTime);
	
	public void updateProOffShelfTime(@Param("id") Long id, @Param("offShelfTime") String offShelfTime);
	
	public int updateSkuByProId(@Param("proId") Long proId, @Param("proSku") String proSku);
	
	public ProductExtInfo findProductExtInfoBySku(@Param("proSku") String proSku, @Param("sysId") Long sysId);
	
	// 过滤下架的商品
	public ProductExtInfo findProExtInfoBySku(@Param("proSku") String proSku, @Param("sysId") Long sysId);
	
}